package com.abner.design.patterns.observer;

import java.util.ArrayList;
import java.util.List;


/**
 * 气象站(具体的实现)
 * @author abner
 */
public class WeatherData implements Subject {

	/**
	 * 温度
	 */
	private float temperature;

	/**
	 * 压力
	 */
	private float pressure;

	/**
	 * 湿度
	 */
	private float humidity;

	/**
	 * 观察者集合
	 */
	private List<Observer> observers;

	public WeatherData() {
		observers = new ArrayList<Observer>();
	}

	/**
	 * 通知观察者
	 */
	public void dataChange() {
		notifyObservers();
	}

	/**
	 * 更新数据
	 * @param temperature 温度
	 * @param pressure 压力
	 * @param humidity 湿度
	 */
	public void setData(float temperature, float pressure, float humidity) {
		this.temperature = temperature;
		this.pressure = pressure;
		this.humidity = humidity;
		dataChange();
	}

	/**
	 * 注册观察者
	 * @param o
	 */
	@Override
	public void registerObserver(Observer o) {
		observers.add(o);
	}

	/**
	 * 移除观察者
	 * @param o
	 */
	@Override
	public void removeObserver(Observer o) {
		if(observers.contains(o)) {
			observers.remove(o);
		}
	}

	/**
	 * 通知观察者
	 */
	@Override
	public void notifyObservers() {
		for(int i = 0; i < observers.size(); i++) {
			observers.get(i).update(this.temperature, this.pressure, this.humidity);
		}
	}
}
